﻿using System;
using System.Collections.Generic;
using System.Linq; 
using System.Text;
using System.Threading.Tasks;
using cs_dame.View;
using cs_dame.Model;
using System.Windows.Forms;

namespace cs_dame.Controler
{
    class Steuerung:ISteuerung
    {
        public SpielerTyp Weiss { get; set; }
        public SpielerTyp Schwarz { get; set; }
        public ISpielstand Spielstand { get; set; }
        private int groesseDesFeldes;
        private SpielfeldAnalysierer checker;

        public Steuerung(SpielerTyp weiss, SpielerTyp schwarz, IGUIView view, int groesse)
        {
            this.Weiss = weiss;
            this.Schwarz = schwarz;
            this.Spielstand = new Spielstand(groesse,view);
            this.groesseDesFeldes = groesse;
            this.checker = new SpielfeldAnalysierer(groesse, Spielstand);
            Spielstand.setStartFeld(-1, -1);
        }

        public void KlickAufFeld(int x, int y)
        {
            bool isWeiss = this.Spielstand.SpielerZieht;
            int[] gewaehlterPunkt = { x, y };
            int[] startpunkt = Spielstand.GetStartfeld();
            if (checker.HatSpielerVerloren(isWeiss))
            {
                Console.WriteLine("Verloren!!");
                Application.Exit();
            }
            if (startpunkt[0] == -1 && startpunkt[1] == -1)
            {
                if (checker.IsAuswahlStartKnotenMoeglich(x, y, isWeiss))
                {
                    Spielstand.setStartFeld(x, y);
                    Spielstand.SpielerZieht = isWeiss;
                    Spielstand.setEreigniss("Erfolgreich   " + x + "/" + y);
                }
                else
                {
                    Spielstand.setStartFeld(-1, -1);
                    Spielstand.setEreigniss("nicht als Startpunkt geeignet");
                }
            }
            else
            {
                if (checker.isAuswahlZielMoeglich(startpunkt[0], startpunkt[1], x, y, isWeiss))
                {
                    Spielstand.setZielFeld(x, y);
                    Spielstand.setAlsFrei(startpunkt[0], startpunkt[1]);
                    Spielstand.SpielerZieht = !Spielstand.SpielerZieht;
                    Spielstand.setStartFeld(-1, -1);
                    Spielstand.setEreigniss("Erfolgreich gezogen");
                }
                else
                {
                    Spielstand.setStartFeld(x, y);
                    Spielstand.setEreigniss("nicht als zielpunkt geeignet" +x+"/"+y);
                }
            }
        }

        public void ZugComputer()
        {
            bool isWeiss = Spielstand.SpielerZieht;
            List<int[]> moeglichePunkte = new List<int[]>();
            int[] startpunkt = Spielstand.GetStartfeld();
            if (startpunkt.Equals(new int[] { -1, -1 }))
            {
                for (int i = 0; i < groesseDesFeldes; i++)
                {
                    for (int j = 0; j < groesseDesFeldes; j++)
                    {
                        if (checker.IsAuswahlStartKnotenMoeglich(i, j, isWeiss))
                        {
                            moeglichePunkte.Add(new int[] {i,j});
                        }
                    }
                }
            }
            else
            {
                for (int i = 0; i < groesseDesFeldes; i++)
                {
                    for (int j = 0; j < groesseDesFeldes; j++)
                    {
                        if (checker.isAuswahlZielMoeglich(startpunkt[0], startpunkt[1], i, j, isWeiss))
                        {
                            moeglichePunkte.Add(new int[] { i, j });
                        }
                    }
                }
            }
            Random rnd = new Random();
//            int entscheidung = rnd.
          }
        }
    public enum SpielerTyp { COMPUTER, MENSCH};
}
